/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kompoaufgabe4dom;

import Exceptions.StapelLeerException;
import Exceptions.StapelVollException;
/**
 *
 * @author Dominik Korittki
 * @author Steffen Gruschka
 */
public class GenerischerStapel<Typ> {
    private Object[] stapel;
    private int aktuelleMenge;
    
    public GenerischerStapel(int groesse) {
        stapel = new Object[groesse];
        aktuelleMenge = 0;
    }
    
    public void push(Typ t) throws NullPointerException, StapelVollException {
        if(t == null)
            throw new NullPointerException();
        
        if(istVoll()) 
            throw new StapelVollException("Stapel voll");
        
        stapel[aktuelleMenge] = t;
        aktuelleMenge++;
    }
    
    public Typ pop() throws StapelLeerException {
        if(istLeer()) 
            throw new StapelLeerException("Stapel leer");
        
        Typ erg = (Typ) stapel[aktuelleMenge-1];
        stapel[aktuelleMenge-1] = null;
        aktuelleMenge--;
        
        return erg;
    }
    
    public boolean istVoll() {
        if(aktuelleMenge >= stapel.length) 
            return true;
        else
            return false;
    }
    
    public boolean istLeer() {
        if(aktuelleMenge <= 0) 
            return true;
        else
            return false;
    }
    
}
